package co.yixiang.yshop.module.order.service.storeorderrule;

import co.yixiang.yshop.framework.common.enums.OrderDefaultRuleEnum;
import co.yixiang.yshop.module.order.controller.admin.storeorderrule.param.OrderRuleCreateParam;
import co.yixiang.yshop.module.order.controller.admin.storeorderrule.param.OrderRuleUpdateParam;
import co.yixiang.yshop.module.order.controller.admin.storeorderrule.vo.StoreOrderRuleVO;
import co.yixiang.yshop.module.order.convert.srotrorderrule.StoreOrderRuleConvert;
import co.yixiang.yshop.module.order.dal.dataobject.storeorderrule.StoreOrderRuleDO;
import co.yixiang.yshop.module.order.dal.mysql.storeorderrule.StoreOrderRuleMapper;
import co.yixiang.yshop.module.order.dal.redis.order.OrderRuleRedisDAO;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;

/**
 * 订单规则service
 */
@Service
public class StoreOrderRuleServiceImpl implements StoreOrderRuleService {
    @Autowired
    private StoreOrderRuleMapper storeOrderRuleMapper;
    @Resource
    private OrderRuleRedisDAO orderRuleRedisDAO;

    @Override
    public int create(OrderRuleCreateParam param) {
        StoreOrderRuleDO convert = StoreOrderRuleConvert.INSTANCE.convert(param);
        int insert = storeOrderRuleMapper.insert(convert);
        if (insert > 0) {
            StoreOrderRuleVO cache = StoreOrderRuleConvert.INSTANCE.convert(convert);
            cache.setUpdateTime(new Date());
            orderRuleRedisDAO.set(cache);
        }
        return insert;
    }

    @Override
    public int update(OrderRuleUpdateParam vo) {
        StoreOrderRuleDO convert = StoreOrderRuleConvert.INSTANCE.convert(vo);
        int i = storeOrderRuleMapper.updateById(convert);
        if (i > 0) {
            StoreOrderRuleVO cache = StoreOrderRuleConvert.INSTANCE.convert(convert);
            cache.setUpdateTime(new Date());
            orderRuleRedisDAO.set(cache);
        }
        return i;
    }

    @Override
    public StoreOrderRuleVO getOrderRuleCache() {
        StoreOrderRuleVO vo = orderRuleRedisDAO.get();
        if (vo == null) {
            vo = new StoreOrderRuleVO();
            // 用户下单后订单自动取消的时间（分钟）
            vo.setAutoOrderCancelTime((int) (OrderDefaultRuleEnum.ORDER_OUTTIME_UNPAY.getDefaultValue()));
            //   收货后订单自动确认的时间（天）
            vo.setAutoOrderTakeTime((int) OrderDefaultRuleEnum.ORDER_OUTTIME_UNCONFIRM.getDefaultValue());
            // 提交售后之后x天自动通过售后 天）
            vo.setAutoAfterSalesPass((int) OrderDefaultRuleEnum.AFTER_SALES_ORDER_OUTTIME_UNCONFIRM.getDefaultValue());
            // 售后审核通过后，多少天用户没寄回，售后自动失败 （天）
            vo.setAfterSalesFailCancel((int) OrderDefaultRuleEnum.AFTER_SALES_ORDER_USER_NO_RETURN_GOODS.getDefaultValue());
            // 用户寄回商品后多少天自动通过售后 （天）
            vo.setAfterSalesOrderAutoSucceed((int) OrderDefaultRuleEnum.AFTER_SALES_ORDER_USER_RETURN_GOODS_CONFIRM.getDefaultValue());

            //  订单确认多久之后不再能售后（天）
            vo.setNoAfterSalesTime((int) OrderDefaultRuleEnum.ORDER_MAX_CAN_AFTER_SALE_TIME.getDefaultValue());
            //   确认收货多少天不能评价（天）
            vo.setOrderNoCommentTime((int) OrderDefaultRuleEnum.ORDER_MAX_CAN_COMMENT_TIME.getDefaultValue());
        }
        return vo;
    }

    @Override
    public int delete() {
        storeOrderRuleMapper.delete(Wrappers.lambdaQuery());
        orderRuleRedisDAO.delete();
        return 0;
    }
}
